JSP内置对象
JSP为简化页面的开发提供了一些内部对象。
这些内部对象不需要由JSP的编写者实例化,它们由JSP容器实现和管理,在所有JSP页面中都能使用内部对象。
内部对象只对表达式和Scriptlet有用,在声明中不能使用。
graph TB
A[隐含对象]:::primary
B[输入 / 输出对象]:::success
C[作用域通信对象]:::success
D[Servlet 对象]:::success
E[错误对象]:::success
F[request]:::danger
G[response]:::danger
H[out]:::danger
I[session]:::danger
J[application]:::danger
K[pageContext]:::danger
L[Page]:::danger
M[config]:::danger
N[exception]:::danger
A --> B
A --> C
A --> D
A --> E
B --> F
B --> G
B --> H
C --> I
C --> J
C --> K
D --> L
D --> M
E --> N
JSP隐含对象功能概述
对象名称
衍 生 类
功能说明
request
javax.servlet.ServletRequest. HttpServletRequest
取得客户端数据与系统的信息
application
javax.servlet.ServletContext
记录与处理在线用户共享的数据。
session
javax.servlet.http.HttpSession
记录与处理在线用户个别的数据。
out
javax.servlet.jsp.JspWriter
控制数据输出的操作。
config
javax.servlet.ServletConfig
取得JSP编译后Servlet的信息。
pageContext
javax.servlet.jsp.PageContext
存取与处理系统运行时期的各项信息
page
java.lang.Object
代表目前的这个JSP网页对象
exception
java.lang.Throwable
例外处理机制
输入/输出对象
控制页面的输入和输出
访问与所有请求和响应有关的数据
包括以下三类:
out 对象
request 对象
response 对象
out对象
out对象
表示输出流
javax.servlet.jsp.JspWriter 类的实例
使用 write()、print() 和 println() 方法
效果
源代码
<%
out . println ( "<table border='1'>" );
out . println ( "<tr>" );
out . println ( "<th bgcolor='#FF6600'>类型</td>" );
out . println ( "<th bgcolor='#FF6600'>输出内容</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>逻辑值</td>" );
out . println ( "<td>" );
out . print ( true ); //输出true
out . println ( "</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>字符值</td>" );
out . println ( "<td>" );
out . println ( 'c' );
out . println ( "</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>整数值</td>" );
out . println ( "<td>" );
out . println ( 34 );
%>
源代码
OutTest.jsp <% @ page language = "java" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" %>
<! DOCTYPE html >
< html >
< head >
< meta charset = "utf-8" >
< title > Insert title here </ title >
</ head >
< body >
<%
out . println ( "<table border='1'>" );
out . println ( "<tr>" );
out . println ( "<th bgcolor='#FF6600'>类型</td>" );
out . println ( "<th bgcolor='#FF6600'>输出内容</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>逻辑值</td>" );
out . println ( "<td>" );
out . print ( true ); //输出true
out . println ( "</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>字符值</td>" );
out . println ( "<td>" );
out . println ( 'c' );
out . println ( "</td>" );
out . println ( "</tr>" );
out . println ( "<tr>" );
out . println ( "<td>整数值</td>" );
out . println ( "<td>" );
out . println ( 34 );
%>
</ body >
</ html >
request对象
request对象
表示客户端对网页的请求
实现 javax.servlet.http.HttpServletRequest
使用 HTTP 协议处理客户端的请求
String getParameter(String name)
String[ ] getParameterValues (String name)
获取页面请求中一个表单组件对应多个值时的用户的请求数据
效果
源代码
<%
out . println ( "<h4>hello " + request . getParameter ( "username" ) + "</h4>" );
out . println ( "<h4>Your password : " + request . getParameter ( "password" ) + "</h4>" );
out . println ( "<br>request.getMethod():" );
out . println ( request . getMethod ()); //返回请求的方法;
out . println ( "<br>request.getParameterNames():" );
Enumeration enumdata = request . getParameterNames (); //返回参数名的枚举;
while ( enumdata . hasMoreElements ()) {
String s = ( String ) enumdata . nextElement (); //返回参数名
out . println ( "参数" + s + "=" + request . getParameter ( s ) + " ;" ); //输出参数名和对应的参数值
}
%>
源代码
RequestTest.jsp <%@ page language = "java" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" import = "java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title> Insert title here</title>
</head>
<body>
<%
out . println ( "<h4>hello " + request . getParameter ( "username" ) + "</h4>" );
out . println ( "<h4>Your password : " + request . getParameter ( "password" ) + "</h4>" );
out . println ( "<br>request.getMethod():" );
out . println ( request . getMethod ()); //返回请求的方法;
out . println ( "<br>request.getParameterNames():" );
Enumeration enumdata = request . getParameterNames (); //返回参数名的枚举;
while ( enumdata . hasMoreElements ()) {
String s = ( String ) enumdata . nextElement (); //返回参数名
out . println ( "参数" + s + "=" + request . getParameter ( s ) + " ;" ); //输出参数名和对应的参数值
}
%>
</body>
</html>
response对象
response对象
处理 JSP 生成的响应
将响应发送给客户端
实现javax.servlet.http.HttpServletResponse 接口使用 HTTP 协议将响应发送给客户端
response 对象常用方法
效果
源代码
<%
String name = request . getParameter ( "username" );
if ( name == null )
response . sendRedirect ( "Login.html" );
else if ( name . equals ( "chenyi" ))
response . sendRedirect ( "Welcome.jsp" );
else
throw new Exception ( "未注册用户!" );
%>
源代码
ResponseTest/Login.jsp <%@ page language = "java" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title> Insert title here</title>
</head>
<body>
<%
String name = request . getParameter ( "username" );
if ( name == null )
response . sendRedirect ( "Login.html" );
else if ( name . equals ( "chenyi" ))
response . sendRedirect ( "Welcome.jsp" );
else
throw new Exception ( "未注册用户!" );
%>
</body>
</html>
源代码
ResponseTest/Welcome.jsp <%@ page language = "java" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" import = "java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title> Insert title here</title>
</head>
<body>
<p>
<h2 align= "center" > request的Headers信息</h2>
</p>
<p align= "left" >
request的method:<%= request . getMethod () %> <br> request的URI:<%= request . getRequestURI () %> <br>
request的Protocol:<%= request . getProtocol () %> <br>
</p>
<table border= "2" >
<th bgcolor= "#FF6600" > request header</th>
<th bgcolor= "#FF6600" > request values</th>
<%
Enumeration headerNames = request . getHeaderNames ();
while ( headerNames . hasMoreElements ()) {
String headName = ( String ) headerNames . nextElement ();
out . println ( "<tr><td>" + headName );
out . println ( "<td>" + request . getHeader ( headName ));
}
%>
</table>
</body>
</html>
作用域通信对象
内置对象的作用域
Page
Request
session
application
作用域通信对象
Application
Session
pageContext
session对象
Web 服务器为单个用户发送的多个请求创建会话存储有关用户会话的所有信息
javax.servlet.http.HttpSession接口的实例
session 对象最常用的方法有:
pageContext对象
pageContext和session、ServletContext属性比较
pageContext设置的属性只在当前页面范围有效。
session设置的属性在当前session中是共享的。
ServletContext设置的属性对所有用户都是共享的。
application对象
application对象 示例
表示 JSP 页面所属的应用程序
应用程序的 JSP 页面组合起来形成一个应用程序
javax.servlet.ServletContext接口实例
application对象最常用的方法有:
ApplicationTest.jsp <%
int count = 1 ;
try {
count = Integer . parseInt ( application . getAttribute ( "counter" ). toString ());
} catch ( Exception e ) {
out . println ( "<p align=center>计数器没有发生作用!</p>" );
}
out . println ( "<p align=center>自从服务器启动后,此页面已经访问了" + count + "次</p>" );
count ++ ;
application . setAttribute ( "counter" , count );
%>
源代码
ApplicationTest.jsp <%@ page language = "java" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title> Insert title here</title>
</head>
<body>
<%
int count = 1 ;
try {
count = Integer . parseInt ( application . getAttribute ( "counter" ). toString ());
} catch ( Exception e ) {
out . println ( "<p align=center>计数器没有发生作用!</p>" );
}
out . println ( "<p align=center>自从服务器启动后,此页面已经访问了" + count + "次</p>" );
count ++ ;
application . setAttribute ( "counter" , count );
%>
</body>
</html>
servlet 对象
JSP引擎为每个JSP生成一个Servlet
Servlet对象提供了访问 Servlet 信息的方法和变量
Servlet 对象包括
page 对象
使用 page 对象可以访问 Servlet 类的所有变量和方法java.lang.Object类的一个实例
<% @ page info = ” 我的信息 ” contentType = ” text / html ; charset = GBK ” %>
<html>
<body>
<%= (( javax . servlet . jsp . HttpJspPage ) page ). getServletInfo () %>
</body>
</html>
config 对象
Exception对象
exception对象用于处理 JSP 页面中的错误
exception 对象用于访问执行 JSP 的过程中引发的异常
exception 对象是 java.lang.Throwable 类的实例
error.jsp <%@ page isErrorPage = "true" contentType = "text/html; charset=utf-8"
pageEncoding = "utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset= "utf-8" >
<title> 错误页面</title>
</head>
<body>
<h1> 发生错误</h1>
<p>
错误类型:
<%= exception . getClass (). getName () %> </p>
<p>
错误信息:
<%= exception . getMessage () %> </p>
</body>
</html>